#!/usr/bin/env Rscript
args = commandArgs(trailingOnly=TRUE)

source("cueing_functions.R")

## This setup allows the function to be called from the
#  command line, making it easy to experiment with
## other thresholds for cocs and oppcs.
cocs <- as.numeric(args[1])
oppcs <- as.numeric(args[2])

# Set up data for use with ASA standard errors
x <- read.csv(paste0("cueing_data1616splitbuddyweighted.csv"))
x$deltay <- (x$agree2 - x$agree1)
x$deltaby <- (x$bagree2 - x$bagree1)
x$friend <- apply(cbind(x$copartisans, x$cs), 1, 
                  function(z) ifelse(z[1] == 1, ifelse(z[2] >= cocs, 1, 0), 
                                     ifelse(z[2] >= oppcs, 1, 0)))

x$legA2 <- apply(x, 1, function(z) paste0(z[16], z[7]))
x$legB2 <- apply(x, 1, function(z) paste0(z[17], z[7]))

Aind <- which(colnames(x) == "legA2")
Bind <- which(colnames(x) == "legB2")

x$dyads <- apply(x, 1, function(r) paste0(r[Aind], "-", r[Bind]))

# Model is here 
fmla <- formula(deltaby ~ treat + friend +
                  I(treat * copartisans) + 
                  I(treat * friend) + 
                  I(friend * copartisans) + 
                  sgcs + I(treat * sgcs) +
                  ogcs + I(treat * ogcs) + 
                  sfcs + I(treat * sfcs) + 
                  ofcs + I(treat * ofcs) + bn1 + bn2 +
                  interaction(factor(congress), committee,
                              leg_party, copartisans))

fit <- lm(fmla, data = x, weights = x$weights)
coef(fit)[1:8]
coef(fit)[1:8]/sqrt(diag(vcov(fit))[1:8])

index <- unique(c(as.character(x$legA2), as.character(x$legB2)))

## You will need access to a cluster computer to calculate the standard errors
dyad.mat <- apply(x[,c(Aind, Bind)], 2, as.character)
cl <- makeCluster(32)
registerDoSNOW(cl)
dyad.vcov <- dyad.robust.se(x, fit, index, dyad.mat)
stopCluster(cl)

# Store with qr = FALSE to save memory
fit <- lm(fmla, data = x, weights = x$weights, qr = FALSE)
save.image(paste0("buddy_cueingresults_", cocs, oppcs, ".RData"))
